package Interfaz;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

public class PanelOperaciones extends JPanel implements ActionListener{
	
	// -----------------------------------------------------------------
    // Constantes
    // -----------------------------------------------------------------
    /**
     * El comando para el botón Cantidad
     */
    public static final String CANTIDAD = "Cantidad";

    /**
     * El comando para el botón Sort1
     */
    public static final String SORT1 = "Sort1";
    
    /**
     * El comando para el botón Sort1 Ordenado
     */
    public static final String SORT1ORDENADO = "Sort1 Ordenado";
    
    /**
     * El comando para el botón Sort2
     */
    public static final String SORT2 = "Sort2";
    
    /**
     * El comando para el botón Sort2 Ordenado
     */
    public static final String SORT2ORDENADO = "Sort2 Ordenado";
    
    // -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------
    
    private boolean esNumero;
    
    // -----------------------------------------------------------------
    // Atributos de interfaz
    // -----------------------------------------------------------------
	
    private JButton botonCantidad;
    
    private JButton botonSort1;
    
    private JButton botonSort1Ordenado;
    
    private JButton botonSort2;
    
    private JButton botonSort2Ordenado;
    
    private JTextArea ingreso;
    
    private JScrollPane barraIng;
    
    // -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------
    
	/**
     * Ventana principal
     */
    private InterfazPrincipal principal;
       
    
    // -----------------------------------------------------------------
    // Constructores
    // -----------------------------------------------------------------
	
    public PanelOperaciones (InterfazPrincipal p)
    { 
        principal = p;
        esNumero = true;
    	
        setBorder( new TitledBorder( "Operación" ) );
        setLayout( new GridBagLayout( ) );

        //Boton Cantidad
        botonCantidad = new JButton( "Ingresar" );
        botonCantidad.setActionCommand( CANTIDAD );
        botonCantidad.addActionListener( this );
        botonCantidad.setEnabled(true);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.BOTH;
        add( botonCantidad, gbc);

        //Boton Sort 1
        botonSort1 = new JButton( "Sort 1" );
        botonSort1.setActionCommand( SORT1 );
        botonSort1.addActionListener( this );
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.BOTH;
        add( botonSort1, gbc);
        
        //Boton Sort 1 Ordenado
        botonSort1Ordenado = new JButton( "Sort 1 Ordenado" );
        botonSort1Ordenado.setActionCommand( SORT1ORDENADO );
        botonSort1Ordenado.addActionListener( this );
        botonSort1Ordenado.setEnabled(false);
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.BOTH;
        add( botonSort1Ordenado, gbc);
     
        //Boton Sort 2
        botonSort2 = new JButton( "Sort 2" );
        botonSort2.setActionCommand( SORT2 );
        botonSort2.addActionListener( this );
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.fill = GridBagConstraints.BOTH;
        add( botonSort2, gbc);

        //Boton Sort 2 Ordenado
        botonSort2Ordenado = new JButton( "Sort 2 Ordenado" );
        botonSort2Ordenado.setActionCommand( SORT2ORDENADO );
        botonSort2Ordenado.addActionListener( this );
        botonSort2Ordenado.setEnabled(false);
        gbc.gridx = 1;
        gbc.gridy = 3;
        gbc.fill = GridBagConstraints.BOTH;
        add( botonSort2Ordenado, gbc);
        
        //Cuadro que despliega la cantidad de números a ordenar
        ingreso = new JTextArea( );
        ingreso.setLineWrap( true );
        ingreso.setWrapStyleWord( true );
        ingreso.setEditable(true);
        barraIng = new JScrollPane( ingreso );
        barraIng.setPreferredSize( new Dimension( 100, 100 ) );
        gbc = new GridBagConstraints( );
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        add(barraIng, gbc);
    }
    
    
    // -----------------------------------------------------------------
    // M�todos
    // -----------------------------------------------------------------
    
    public boolean esNumero (String s) 
    {
    	for (int i = 0; esNumero && i < s.length(); i++)
    	{
    		esNumero = Character.isDigit(s.charAt(i));
    	}
    	return esNumero;
    }
    
    public void habilitarBotones()
    {
    	botonSort1Ordenado.setEnabled(true);
    	botonSort2Ordenado.setEnabled(true);
    }
    
    public void actionPerformed( ActionEvent e )
    {
        String comando = e.getActionCommand( );

        	
        if( comando.equals( CANTIDAD ) )
        {	
        	String ingresado = ingreso.getText(); 
        	if (!ingresado.isEmpty())
        	{
        		if (!esNumero(ingresado))
        		{
        			JOptionPane.showMessageDialog(this, "Lo ingresado no es un número que pueda procesarse.","", JOptionPane.PLAIN_MESSAGE);
        		}
        		
        		else
        		{
        			int cantidad = Integer.parseInt(ingreso.getText());
        			if (cantidad >= 10 && cantidad <= 2000)
        			{
        				principal.generar(cantidad);
        			}
            
        			else
        				JOptionPane.showMessageDialog(this, "Lo ingresado no es un número que pueda procesarse.","", JOptionPane.PLAIN_MESSAGE);
        		}
        	}
        	else
        		JOptionPane.showMessageDialog(this, "Debe ingresar un número entre 10 y 2000.","", JOptionPane.PLAIN_MESSAGE);
        }
        
        else if( comando.equals( SORT1 ) )
        {
        	if (!ingreso.getText().isEmpty())
        	{
        		principal.sort1(false);
        		habilitarBotones();
        	}
        	else
        		JOptionPane.showMessageDialog(this, "Debe ingresar un número entre 10 y 2000.","", JOptionPane.PLAIN_MESSAGE);
        }

        else if( comando.equals( SORT1ORDENADO ) )
        {
        	principal.sort1(true);
        }
        else if( comando.equals( SORT2 ) )
        {
        	if (!ingreso.getText().isEmpty())
        	{
        		principal.sort2(false);
        		habilitarBotones();
        	}
        	else
        		JOptionPane.showMessageDialog(this, "Debe ingresar un número entre 10 y 2000.","", JOptionPane.PLAIN_MESSAGE);
        }
        else if( comando.equals( SORT2ORDENADO ) )
        {
        	principal.sort2(true);
        }
    }
}
